package day06.concurrent03;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 线程池 - 关闭线程池
 */
public class Demo01 {
    public static void main(String[] args) {
        ThreadPoolExecutor pool = new ThreadPoolExecutor(3,5,5, TimeUnit.SECONDS,new ArrayBlockingQueue<>(3));
        pool.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程1");
                while(true){
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        //线程池使用完成后必须关闭
        //--正常关闭线程池，执行过后将不再接受新的任务，但已经接受的任务会等待其执行完毕，直到所有的任务都执行完成后，关闭所有线程，关闭线程池
        pool.shutdown();
        //--立即强制关闭线程池，不管任务是否执行完毕，立即关闭所有线程，关闭线程池，虽然可以立即关闭线程池，但可能会导致部分任务的执行出现不可预测的意外
        //pool.shutdownNow();
    }
}
